iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 17
0
Big Data

資料科學:使用 Clojure系列 第 17

Day 17 - 單元五:大數據(二)

  • 分享至 

  • xImage
  •  

多元線性回歸 + 梯度下降算法

在〈第三章:相關性〉描述了如何使用線性代數公式進行快速的多元線性回歸估算。但是,那裏的公式主要是適用於能夠全部放進記憶體的資料。對於不能夠放進記憶體的巨大資料,但卻又必須進行矩陣轉置(matrix inversion),有一種策略叫梯度下降(gradient descent)。

在小型資料中,可以使用 Incanter 的 minimize,然而遇到大型資料,Incanter 就無能為力,此時可以改用 Tesser

註:關於梯度下降算法的公式與學習速率(learning rate)的解釋,請見原書 P.255,這邊略過。

縮放數值範圍(feature scaling)

將納入學習的數值根據某些統計特性調整數值,例如所有數值都標準化(standardization)。由前小節 t/facet 計算出的所有的平均數、標準差都都存放於 map 中, 可以使用 merge-with 來把計算後的結果與原本的做合併處理。

(defn feature-scales [features]
  (->> (prepare-data)
       (t/map #(select-keys % features))
       (t/facet)
       (t/fuse {:mean (m/mean)
                :sd   (m/standard-deviation)})))

(defn ex-5-24 []
  (let [data (iota/seq "data/soi.csv")
        features [:A02300 :A00200 :AGI_STUB :NUMDEP :MARS2]]
    (->> (feature-scales features)
         (t/tesset (chunks data)))))
;; {:MARS2 {:sd 533.4496892658647, :mean 317.0412009748016}...} 

(defn scale-features [factors]
  (let [f (fn [x {:keys [mean sd]}] (/ (- x mean) sd))]
    (fn [x] (merge-with f x factors))))

(defn unscale-features  [factors] ;; for reversal
  (let [f (fn [x {:keys [mean sd]}] (+ (* x sd) mean))]
    (fn [x] (merge-with f x factors))))

上一篇
Day 16 - 單元五:大數據(一)
下一篇
Day 18 - 單元六:群聚算法(一)
系列文
資料科學:使用 Clojure30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言